// utils/request.js

const baseUrl = "http://110.41.38.235:8080"; // API 基本 URL

// 增强版参数序列化方法
const serializeParams = (params) => {
	return Object.keys(params)
		.filter(key => params[key] != null) // 过滤空值
		.map(key => {
			const value = params[key];
			// 自动处理特殊类型参数
			if (Array.isArray(value)) return `${key}=${value.join(',')}`;
			if (typeof value === 'boolean') return `${key}=${value ? 1 : 0}`;
			return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
		})
		.join('&');
};

const request = async (url, method = "GET", data = {}) => {
	let targetUrl = `${baseUrl}${url}`;
	const authorization = uni.getStorageSync('authorization') || "";

	// GET请求参数处理
	if (method.toUpperCase() === 'GET' && Object.keys(data).length) {
		const queryString = serializeParams(data);
		targetUrl += `${targetUrl.includes('?') ? '&' : '?'}${queryString}`;
	}

	try {
		const response = await uni.request({
			url: targetUrl, // 使用处理后的带参数URL
			method,
			// 根据请求方法决定data传输方式
			data: method.toUpperCase() === 'GET' ? {} : data,
			header: {
				authorization,
				// 智能设置Content-Type
				'Content-Type': method === 'GET' ?
					'application/x-www-form-urlencoded' : 'application/json'
			}
		});
		return response.data; // 直接返回 data 数据
	} catch (error) {
		console.error("API 请求失败", error);
		uni.showToast({
			title: '网络错误，请稍后再试',
			icon: 'none',
		});
		throw error;
	}
};


export default request;